package com.agritech.machine;

/**
 * 拖拉机类
 * 实现了农业机械抽象类，提供拖拉机特有的功能
 */
public class Tractor extends AgriculturalMachine {
    private double maxSpeed; // 最大速度(公里/小时)
    private double currentSpeed; // 当前速度
    private double plowDepth; // 耕地深度(厘米)
    private boolean isPlowing; // 是否正在耕地

    public Tractor(String id) {
        super(id, "无人驾驶拖拉机");
        this.maxSpeed = 30.0;
        this.currentSpeed = 0.0;
        this.plowDepth = 20.0; // 默认耕地深度
        this.isPlowing = false;
    }

    @Override
    public void start() {
        System.out.println(getType() + " [" + getId() + "] 启动中，检查系统...");
        updateStatus("工作中");
        System.out.println(getType() + " [" + getId() + "] 已启动，准备耕作作业");
    }

    @Override
    public void stop() {
        System.out.println(getType() + " [" + getId() + "] 正在停止作业...");
        setCurrentSpeed(0.0);
        if (isPlowing) {
            stopPlowing();
        }
        updateStatus("空闲");
        System.out.println(getType() + " [" + getId() + "] 已停止，耕作作业结束");
    }

    @Override
    public void performTask(String taskDetails) {
        System.out.println(getType() + " [" + getId() + "] 正在执行耕作任务: " + taskDetails);
        startPlowing();
        setCurrentSpeed(10.0); // 设置工作速度
        System.out.println("当前耕地深度: " + plowDepth + "厘米, 速度: " + currentSpeed + "公里/小时");
        consumeFuel(10.0); // 消耗燃油
    }

    /**
     * 设置当前速度
     * @param speed 新的速度(公里/小时)
     */
    public void setCurrentSpeed(double speed) {
        if (speed > maxSpeed) {
            System.out.println("警告: 速度超过最大限制，已自动调整为最大速度");
            this.currentSpeed = maxSpeed;
        } else {
            this.currentSpeed = speed;
            System.out.println(getType() + " [" + getId() + "] 速度已调整为 " + currentSpeed + "公里/小时");
        }
    }

    /**
     * 调整耕地深度
     * @param depth 新的耕地深度(厘米)
     */
    public void adjustPlowDepth(double depth) {
        System.out.println(getType() + " [" + getId() + "] 调整耕地深度从 " + this.plowDepth + "厘米 到 " + depth + "厘米");
        this.plowDepth = depth;
    }

    /**
     * 开始耕地
     */
    public void startPlowing() {
        if (!isPlowing) {
            System.out.println(getType() + " [" + getId() + "] 开始耕地作业，深度: " + plowDepth + "厘米");
            isPlowing = true;
        }
    }

    /**
     * 停止耕地
     */
    public void stopPlowing() {
        if (isPlowing) {
            System.out.println(getType() + " [" + getId() + "] 停止耕地作业");
            isPlowing = false;
        }
    }

    /**
     * 获取当前速度
     * @return 当前速度(公里/小时)
     */
    public double getCurrentSpeed() {
        return currentSpeed;
    }

    /**
     * 获取耕地深度
     * @return 耕地深度(厘米)
     */
    public double getPlowDepth() {
        return plowDepth;
    }

    /**
     * 检查是否正在耕地
     * @return 是否正在耕地
     */
    public boolean isPlowing() {
        return isPlowing;
    }
}